package cn.jly.mybatis.typehandler;

import cn.jly.mybatis.enums.EmpStatus;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 可以实现typeHandler接口，或者继承BaseTypeHandler
 *
 * @author lanyangji
 * @description 自定义枚举类型处理器
 * @date 2020/11/20 下午 7:13
 */
public class MyEnumEmpStatusTypeHandler implements TypeHandler<EmpStatus> {
    /**
     * 定义当前数据如何保存到数据库中
     * 这里将枚举状态的状态码保存到数据库中
     *
     * @param preparedStatement
     * @param i
     * @param empStatus
     * @param jdbcType
     * @throws SQLException
     */
    @Override
    public void setParameter(PreparedStatement preparedStatement, int i, EmpStatus empStatus, JdbcType jdbcType) throws SQLException {
        preparedStatement.setInt(i, empStatus.getCode());
    }

    @Override
    public EmpStatus getResult(ResultSet resultSet, String columnName) throws SQLException {
        final int code = resultSet.getInt(columnName);
        return EmpStatus.valueOfCode(code);
    }

    @Override
    public EmpStatus getResult(ResultSet resultSet, int i) throws SQLException {
        final int code = resultSet.getInt(i);
        return EmpStatus.valueOfCode(code);
    }

    @Override
    public EmpStatus getResult(CallableStatement callableStatement, int i) throws SQLException {
        final int code = callableStatement.getInt(i);
        return EmpStatus.valueOfCode(code);
    }
}
